νλ‘ νΈμλ μΉ μ ν리μΌμ΄μ μμ μλ¦¬μΌ ν΅μ ꡬνμ λν μ’ ν© κ°μ΄λλ‘, μμ μ μΈ λ°μ΄ν° κ΅νμ μν νλ¦ μ μ΄ κΈ°μ μ μ€μ μ λ‘λλ€. Web Serial API, μΌλ°μ μΈ λ¬Έμ μ λ° κΈλ‘λ² μ ν리μΌμ΄μ μ μν λͺ¨λ² μ¬λ‘μ λν΄ μμ보μΈμ.
νλ‘ νΈμλ μΉ μλ¦¬μΌ νλ¦ μ μ΄: μλ¦¬μΌ ν΅μ κ΄λ¦¬ λ§μ€ν°νκΈ°
Web Serial APIλ μΉ μ ν리μΌμ΄μ μ μλ‘μ΄ κ°λ₯μ±μ μ΄μ΄μ£Όμ΄ μλ¦¬μΌ ν¬νΈλ₯Ό ν΅ν΄ νλμ¨μ΄ μ₯μΉμ μ§μ ν΅μ ν μ μκ² ν©λλ€. μ΄λ λ§μ΄ν¬λ‘컨νΈλ‘€λ¬(Arduino λλ ESP32μ κ°μ), κ³Όν κΈ°κΈ°, μ°μ μ₯λΉ λ° κΈ°ν μλ² λλ μμ€ν κ³Ό μνΈ μμ©νλ μ ν리μΌμ΄μ μ νΉν μ μ©ν©λλ€. κ·Έλ¬λ μλ¦¬μΌ ν΅μ μ μμ μ μΌλ‘ κ΄λ¦¬νλ €λ©΄, νΉν λ€μν μ₯μΉ κΈ°λ₯ λ° λ€νΈμν¬ νκ²½μμ νλ¦ μ μ΄μ μΈμ¬ν μ£Όμλ₯Ό κΈ°μΈμ¬μΌ ν©λλ€.
μλ¦¬μΌ ν΅μ κΈ°λ³Έ μ¬ν μ΄ν΄
νλ¦ μ μ΄λ₯Ό μ΄ν΄λ³΄κΈ° μ μ μλ¦¬μΌ ν΅μ μ κΈ°λ³Έ μ¬νμ μμ½ν΄ λ³΄κ² μ΅λλ€.
- μλ¦¬μΌ ν¬νΈ: μ₯μΉκ° λ°μ΄ν°λ₯Ό ν λ²μ ν λΉνΈμ© μ μ‘ν μ μλλ‘ νλ 물리μ μΈν°νμ΄μ€(μ’ μ’ USB-to-Serial)μ λλ€.
- Baud Rate: λ°μ΄ν°κ° μ μ‘λλ μλ(μ΄λΉ λΉνΈ μ)μ λλ€. λ μ₯μΉκ° μ΄ μλμ λμν΄μΌ ν©λλ€. μΌλ°μ μΈ λ³΄λ μλλ 9600, 115200 λ±μ λλ€.
- Data Bits: λ¨μΌ λ¬Έμλ₯Ό λνλ΄λ λ° μ¬μ©λλ λΉνΈ μ(μΌλ°μ μΌλ‘ 7 λλ 8)μ λλ€.
- Parity: μ€λ₯ κ°μ§ λ°©λ²μ λλ€. μ§μ, νμ λλ μμμ΄ λ μ μμ΅λλ€.
- Stop Bits: λ¬Έμ λμ μ리λ λ° μ¬μ©λλ λΉνΈ(μΌλ°μ μΌλ‘ 1 λλ 2)μ λλ€.
Web Serial APIλ λΈλΌμ°μ νκ²½ λ΄μμ μ΄λ¬ν μλ¦¬μΌ ν¬νΈ μ€μ μ ꡬμ±νκ³ κ΄λ¦¬νκΈ° μν JavaScript μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
νλ¦ μ μ΄κ° νμν μ΄μ
νλ¦ μ μ΄ λ©μ»€λμ¦μ λ°μ΄ν° μμ€μ λ°©μ§νκ³ μΉ μ ν리μΌμ΄μ κ³Ό μ°κ²°λ μ₯μΉ κ°μ μμ μ μΈ ν΅μ μ 보μ₯νλ λ° νμμ μ λλ€. λ€μκ³Ό κ°μ λ¬Έμ λ‘ μΈν΄ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
- μ₯μΉ λ²νΌ μ€λ²νλ‘: μ₯μΉκ° μ²λ¦¬ν μ μλ κ²λ³΄λ€ λΉ λ₯΄κ² λ°μ΄ν°λ₯Ό μμ νμ¬ λ°μ΄ν° μμ€μ μ΄λν μ μμ΅λλ€.
- λ€νΈμν¬ μ§μ° μκ°: μΉ μ ν리μΌμ΄μ μ΄ λ€νΈμν¬λ₯Ό ν΅ν΄ μ₯μΉμ ν΅μ νλ μλ리μ€(μ: μ리μΌ-λ€νΈμν¬ λ³νκΈ°)μμ λ€νΈμν¬ μ§μ° μκ°μΌλ‘ μΈν΄ λ°μ΄ν° μ μ‘μ μ§μ°μ΄ λ°μν μ μμ΅λλ€.
- κ°λ³ μ²λ¦¬ μλ: μΉ μ ν리μΌμ΄μ μ μ²λ¦¬ μλλ λΈλΌμ°μ , μ¬μ©μ μμ€ν λ° κΈ°ν μ€ν μ€μΈ μ€ν¬λ¦½νΈμ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
νλ¦ μ μ΄κ° μμΌλ©΄ μ΄λ¬ν λ¬Έμ λ‘ μΈν΄ λ°μ΄ν°κ° μμλκ±°λ ν΅μ μ€λ₯κ° λ°μνμ¬ μ¬μ©μ κ²½νμ ν° μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μλ¦¬μΌ νλ¦ μ μ΄ μ ν
μλ¦¬μΌ ν΅μ μ μ¬μ©λλ νλ¦ μ μ΄μλ λ κ°μ§ μ£Όμ μ νμ΄ μμ΅λλ€.
1. νλμ¨μ΄ νλ¦ μ μ΄ (RTS/CTS)
νλμ¨μ΄ νλ¦ μ μ΄λ μ μ© νλμ¨μ΄ λΌμΈ(RTS - Request To Send, CTS - Clear To Send)μ μ¬μ©νμ¬ μ₯μΉκ° λ°μ΄ν°λ₯Ό μμ ν μ€λΉκ° λμμμ μ립λλ€.
- RTS (Request To Send): μ μ‘ μ₯μΉκ° μ μ‘ν λ°μ΄ν°κ° μμμ λνλ΄κΈ° μν΄ μ΄μ€μ ν©λλ€.
- CTS (Clear To Send): μμ μ₯μΉκ° λ°μ΄ν°λ₯Ό μμ ν μ€λΉκ° λμμμ λνλ΄κΈ° μν΄ μ΄μ€μ ν©λλ€.
μ μ‘ μ₯μΉλ CTS λΌμΈμ΄ μ΄μ€μ λ λλ§ λ°μ΄ν°λ₯Ό 보λ λλ€. μ΄λ λ²νΌ μ€λ²νλ‘λ₯Ό λ°©μ§νλ μμ μ μΈ νλμ¨μ΄ κΈ°λ° λ©μ»€λμ¦μ μ 곡ν©λλ€. Web Serial APIμμλ ν¬νΈ κ΅¬μ± μ€μ νλμ¨μ΄ νλ¦ μ μ΄λ₯Ό νμ±νν©λλ€.
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200, flowControl: "hardware" });
μ₯μ :
- λ§€μ° μμ μ μ λλ€.
- νλμ¨μ΄ μμ€ κ΅¬νμ μΌλ°μ μΌλ‘ λ λΉ λ₯΄κ³ ν¨μ¨μ μ λλ€.
λ¨μ :
- μ μ© νλμ¨μ΄ λΌμΈμ΄ νμνλ©°, μ΄λ λͺ¨λ μ₯μΉμμ μ¬μ© κ°λ₯νμ§ μμ μ μμ΅λλ€.
- 물리μ μ°κ²°μ 볡μ‘μ±μ μ¦κ°μν¬ μ μμ΅λλ€.
μ: CNC κΈ°κ³λ₯Ό μ μ΄νλ μΉ μ ν리μΌμ΄μ μ μμν΄ λ³΄μμμ€. CNC κΈ°κ³μλ μ νλ λ²νΌκ° μμ μ μμ΅λλ€. νλμ¨μ΄ νλ¦ μ μ΄λ μΉ μ ν리μΌμ΄μ μ΄ CNC κΈ°κ³κ° λͺ λ Ήμ μ²λ¦¬ν μ€λΉκ° λμμ λλ§ λͺ λ Ήμ 보λ΄λλ‘ λ³΄μ₯νμ¬ λ°μ΄ν° μμ€μ λ°©μ§νκ³ μ νν μλμ 보μ₯ν©λλ€.
2. μννΈμ¨μ΄ νλ¦ μ μ΄ (XON/XOFF)
μννΈμ¨μ΄ νλ¦ μ μ΄λ νΉμ λ¬Έμ(XON - Transmit On, XOFF - Transmit Off)λ₯Ό μ¬μ©νμ¬ μ₯μΉκ° λ°μ΄ν°λ₯Ό μμ ν μ€λΉκ° λμμμ μ립λλ€. μ΄λ¬ν λ¬Έμλ λ°μ΄ν° μ€νΈλ¦Ό μ체 λ΄μμ μ μ‘λ©λλ€.
- XOFF (Transmit Off): μμ μ₯μΉκ° μ μ‘ μ₯μΉμ λ°μ΄ν° μ μ‘μ μ€μ§νλλ‘ μ§μνκΈ° μν΄ λ³΄λ λλ€.
- XON (Transmit On): μμ μ₯μΉκ° μ μ‘ μ₯μΉμ λ°μ΄ν° μ μ‘μ μ¬κ°νλλ‘ μ§μνκΈ° μν΄ λ³΄λ λλ€.
Web Serial APIλ κ΅¬μ± μ΅μ μ ν΅ν΄ XON/XOFF νλ¦ μ μ΄λ₯Ό μ§μ μ§μνμ§ μμ΅λλ€. μ΄λ₯Ό ꡬννλ €λ©΄ JavaScript μ½λμμ XON λ° XOFF λ¬Έμλ₯Ό μλμΌλ‘ μ²λ¦¬ν΄μΌ ν©λλ€.
μ₯μ :
- μ μ© νλμ¨μ΄ νλ¦ μ μ΄ λΌμΈμ΄ μλ μ₯μΉμμ μ¬μ©ν μ μμ΅λλ€.
- λ κ°λ¨ν νλμ¨μ΄ μ€μ μ λλ€.
λ¨μ :
- XON/XOFF λ¬Έμ μμ²΄κ° μμ€λκ±°λ μμλ μ μμΌλ―λ‘ νλμ¨μ΄ νλ¦ μ μ΄λ³΄λ€ λ μμ μ μ λλ€.
- XON/XOFF λ¬Έμκ° λ€λ₯Έ μ©λλ‘λ μ¬μ©λλ κ²½μ° λ°μ΄ν° μ€νΈλ¦Όμ λ°©ν΄ν μ μμ΅λλ€.
- λ 볡μ‘ν μννΈμ¨μ΄ ꡬνμ΄ νμν©λλ€.
μ: μΌμκ° μΉ μ ν리μΌμ΄μ μΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ κ²½μ°λ₯Ό κ³ λ €ν΄ λ³΄μμμ€. μΉ μ ν리μΌμ΄μ μ μ²λ¦¬ λΆνκ° μ¦κ°νλ©΄ XOFF λ¬Έμλ₯Ό μΌμλ‘ λ³΄λ΄ λ°μ΄ν° μ μ‘μ μΌμμ μΌλ‘ μ€μ§ν μ μμ΅λλ€. μ²λ¦¬ λΆνκ° κ°μνλ©΄ μΉ μ ν리μΌμ΄μ μ XON λ¬Έμλ₯Ό λ³΄λ΄ λ°μ΄ν° μ μ‘μ μ¬κ°ν©λλ€. μ΄λ μΉ μ ν리μΌμ΄μ μ΄ κ³ΌλΆνλ‘ μΈν΄ λ°μ΄ν° ν¬μΈνΈλ₯Ό λμΉμ§ μλλ‘ λ³΄μ₯ν©λλ€.
Web Serial APIλ₯Ό μ¬μ©ν μννΈμ¨μ΄ νλ¦ μ μ΄ κ΅¬ν
Web Serial APIμλ XON/XOFF μ§μμ΄ λ΄μ₯λμ΄ μμ§ μμΌλ―λ‘ μλμΌλ‘ ꡬνν΄μΌ ν©λλ€. λ€μμ κΈ°λ³Έμ μΈ μ κ·Ό λ°©μμ λλ€.
- XON λ° XOFF λ¬Έμ μ μ: XON λ° XOFFμ μ¬μ©ν νΉμ λ¬Έμλ₯Ό μ μν©λλ€. μ΄λ μ’ μ’ ASCII μ μ΄ λ¬Έμμ λλ€(μ: XONμ κ²½μ° 0x11, XOFFμ κ²½μ° 0x13).
- λ°μ΄ν° λ²νΌ ꡬν: λ€μ΄μ€λ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ JavaScript μ½λμ λ²νΌλ₯Ό λ§λλλ€.
- λ²νΌ ν¬κΈ° λͺ¨λν°λ§: λ²νΌ ν¬κΈ°λ₯Ό μ κΈ°μ μΌλ‘ νμΈν©λλ€.
- λ²νΌκ° μ©λμ κ°κΉμμ§λ©΄ XOFF μ μ‘: λ²νΌκ° νΉμ μκ³κ°μ λλ¬νλ©΄ XOFF λ¬Έμλ₯Ό μ₯μΉλ‘ λ³΄λ΄ μ μ‘μ μΌμ μ€μ§ν©λλ€.
- λ²νΌμ 곡κ°μ΄ μμΌλ©΄ XON μ μ‘: λ²νΌμ μΆ©λΆν 곡κ°μ΄ μμΌλ©΄ XON λ¬Έμλ₯Ό μ₯μΉλ‘ λ³΄λ΄ μ μ‘μ μ¬κ°ν©λλ€.
- λ€μ΄μ€λ λ°μ΄ν° μ€νΈλ¦Όμμ XON/XOFF λ¬Έμ μ²λ¦¬: λ°μ λ°μ΄ν°μμ XON/XOFF λ¬Έμλ₯Ό νν°λ§νμ¬ μ²λ¦¬ν©λλ€.
λ€μμ μ΄λ₯Ό ꡬννλ λ°©λ²μ κ°λ¨ν μμ λλ€.
const XON = 0x11;
const XOFF = 0x13;
const BUFFER_SIZE = 1024;
const BUFFER_THRESHOLD = 800;
let dataBuffer = [];
let isTransmitting = true;
async function readSerialData(reader, writer) {
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
console.log("Reader done!");
break;
}
// Convert Uint8Array to string
const receivedString = new TextDecoder().decode(value);
// Filter out XON/XOFF characters (if present in the received string)
const filteredString = receivedString.replace(/\u0011/g, '').replace(/\u0013/g, '');
// Add data to buffer
dataBuffer.push(filteredString);
// Check buffer size
if (dataBuffer.join('').length > BUFFER_THRESHOLD && isTransmitting) {
console.log("Sending XOFF");
const encoder = new TextEncoder();
await writer.write(encoder.encode(String.fromCharCode(XOFF)));
isTransmitting = false;
}
// Process data (example: log to console)
console.log("Received:", filteredString);
// Example: Clear the buffer and resume transmission after processing
if (dataBuffer.join('').length < BUFFER_THRESHOLD / 2 && !isTransmitting) {
console.log("Sending XON");
const encoder = new TextEncoder();
await writer.write(encoder.encode(String.fromCharCode(XON)));
isTransmitting = true;
dataBuffer = []; // Clear the buffer after processing
}
}
} catch (error) {
console.error("Serial read error:", error);
} finally {
reader.releaseLock();
}
}
async function writeSerialData(writer, data) {
const encoder = new TextEncoder();
await writer.write(encoder.encode(data));
await writer.close();
}
async function openSerialPort() {
try {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200 });
const reader = port.readable.getReader();
const writer = port.writable.getWriter();
readSerialData(reader, writer);
} catch (error) {
console.error("Serial port error:", error);
}
}
// Example usage:
openSerialPort();
XON/XOFFμ λν μ€μ κ³ λ € μ¬ν:
- XON/XOFF λ¬Έμ μ ν: μΌλ° λ°μ΄ν° μ€νΈλ¦Όμ λνλ κ°λ₯μ±μ΄ μλ λ¬Έμλ₯Ό μ νν©λλ€.
- μ€λ₯ μ²λ¦¬: μμ€λκ±°λ μμλ XON/XOFF λ¬Έμλ₯Ό μ²λ¦¬νκΈ° μν μ€λ₯ μ²λ¦¬λ₯Ό ꡬνν©λλ€. μ¬κΈ°μλ μκ° μ΄κ³Ό λ° μ¬μ μ‘ μ λ΅μ΄ ν¬ν¨λ μ μμ΅λλ€.
- νμ΄λ°: XON/XOFF λ¬Έμλ₯Ό 보λ΄λ νμ΄λ°μ΄ μ€μν©λλ€. λ²νΌκ° μμ ν μ±μμ§κΈ° μ μ XOFFλ₯Ό 보λ΄κ³ μΆ©λΆν 곡κ°μ΄ μμ λ XONμ 보λ λλ€.
- μ₯μΉ μ§μ: ν΅μ νλ μ₯μΉκ° μ€μ λ‘ XON/XOFF νλ¦ μ μ΄λ₯Ό μ§μνκ³ λμΌν XON/XOFF λ¬Έμλ₯Ό μ¬μ©νλμ§ νμΈν©λλ€.
Web Serial νλ¦ μ μ΄λ₯Ό μν λͺ¨λ² μ¬λ‘
λ€μμ μΉ μ ν리μΌμ΄μ μμ μλ¦¬μΌ ν΅μ λ° νλ¦ μ μ΄λ₯Ό ꡬννκΈ° μν λͺ κ°μ§ μΌλ°μ μΈ λͺ¨λ² μ¬λ‘μ λλ€.
- μ¬μ© κ°λ₯ν κ²½μ° νλμ¨μ΄ νλ¦ μ μ΄ μ¬μ©: νλμ¨μ΄ νλ¦ μ μ΄(RTS/CTS)λ μΌλ°μ μΌλ‘ μννΈμ¨μ΄ νλ¦ μ μ΄(XON/XOFF)λ³΄λ€ λ μμ μ μ΄κ³ ν¨μ¨μ μ λλ€. κ°λ₯νλ©΄ μΈμ λ μ§ μ¬μ©νμμμ€.
- μ₯μΉ κΈ°λ₯ μ΄ν΄: ν΅μ νλ μ₯μΉμ λν λ¬Έμλ₯Ό μ£Όμ κΉκ² κ²ν νμ¬ νλ¦ μ μ΄ κΈ°λ₯ λ° μꡬ μ¬νμ μ΄ν΄ν©λλ€.
- μ€λ₯ μ²λ¦¬ ꡬν: ν΅μ μ€λ₯, λ°μ΄ν° μμ λ° κΈ°ν μκΈ°μΉ μμ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ λ° κ°λ ₯ν μ€λ₯ μ²λ¦¬κ° νμμ μ λλ€.
- λΉλκΈ° μμ μ¬μ©: Web Serial APIλ λΉλκΈ°μ μ΄λ―λ‘ νμ `async/await` λλ Promiseλ₯Ό μ¬μ©νμ¬ μλ¦¬μΌ ν΅μ μμ μ μ²λ¦¬ν©λλ€. μ΄λ κ² νλ©΄ κΈ°λ³Έ μ€λ λκ° μ°¨λ¨λλ κ²μ λ°©μ§νκ³ μλ΅μ±μ΄ λ°μ΄λ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό 보μ₯ν μ μμ΅λλ€.
- μ² μ ν ν μ€νΈ: λ€μν μ₯μΉ, λ€νΈμν¬ μ‘°κ±΄ λ° λΈλΌμ°μ λ²μ μΌλ‘ μλ¦¬μΌ ν΅μ ꡬνμ μ² μ ν ν μ€νΈνμ¬ μμ μ±μ 보μ₯ν©λλ€.
- λ°μ΄ν° μΈμ½λ© κ³ λ €: μ μ ν λ°μ΄ν° μΈμ½λ© νμ(μ: UTF-8, ASCII)μ μ ννκ³ μΉ μ ν리μΌμ΄μ κ³Ό μ₯μΉκ° λμΌν μΈμ½λ©μ μ¬μ©νλμ§ νμΈν©λλ€.
- μ°κ²° λκΉμ μ μμ μΌλ‘ μ²λ¦¬: μ°κ²° λκΉμ κ°μ§νκ³ μ μμ μΌλ‘ μ²λ¦¬νκΈ° μν λ‘μ§μ ꡬνν©λλ€. μ¬κΈ°μλ μ¬μ©μμκ² μ€λ₯ λ©μμ§λ₯Ό νμνκ³ μ₯μΉμ λ€μ μ°κ²°μ μλνλ κ²μ΄ ν¬ν¨λ μ μμ΅λλ€.
- 보μμ μ μ: μλ¦¬μΌ ν¬νΈλ₯Ό μΉ μ ν리μΌμ΄μ μ λ ΈμΆνλ 보μ μν₯μ μΈμ§νμμμ€. μ₯μΉμμ μμ ν λ°μ΄ν°λ₯Ό μμ νμ¬ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) μ·¨μ½μ μ λ°©μ§ν©λλ€. μ λ’°ν μ μλ μ₯μΉμλ§ μ°κ²°ν©λλ€.
κΈλ‘λ² κ³ λ € μ¬ν
μλ¦¬μΌ ν¬νΈλ₯Ό ν΅ν΄ νλμ¨μ΄ μ₯μΉμ μνΈ μμ©νλ μΉ μ ν리μΌμ΄μ μ κ°λ°ν λ λ€μ κΈλ‘λ² μμλ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
- κ΅μ ν(i18n): λ€μν μΈμ΄ λ° λ¬Έμ μ§ν©μ μ§μνλλ‘ μ ν리μΌμ΄μ μ μ€κ³ν©λλ€. λ°μ΄ν° μ μ‘ λ° νμμ μ λμ½λ μΈμ½λ©(UTF-8)μ μ¬μ©ν©λλ€.
- μ§μν(l10n): λ μ§ λ° μκ° νμ, μ«μ νμ, ν΅ν κΈ°νΈμ κ°μ λ€μν μ§μ μ€μ μ λ§κ² μ ν리μΌμ΄μ μ μ‘°μ ν©λλ€.
- μκ°λ: νμμ€ν¬νλ₯Ό μ²λ¦¬νκ±°λ μμ μ μμ½ν λ μκ°λλ₯Ό μ μνμμμ€. νμμ€ν¬νλ₯Ό λ΄λΆμ μΌλ‘ μ μ₯ν λλ UTC(Coordinated Universal Time)λ₯Ό μ¬μ©νκ³ νμν λλ μ¬μ©μ νμ§ μκ°λλ‘ λ³νν©λλ€.
- νλμ¨μ΄ κ°μ©μ±: λ€μν μ§μμμ νΉμ νλμ¨μ΄ κ΅¬μ± μμμ κ°μ©μ±μ κ³ λ €ν©λλ€. μ ν리μΌμ΄μ μ΄ νΉμ μ리μΌ-USB μ΄λν°μ μμ‘΄νλ κ²½μ° λμ μμ₯μμ μ½κ² ꡬν μ μλμ§ νμΈν©λλ€.
- κ·μ μ€μ: λ€μν κ΅κ°μμ λ°μ΄ν° κ°μΈ μ 보 보νΈ, 보μ λλ νλμ¨μ΄ νΈνμ±κ³Ό κ΄λ ¨λ κ·μ μꡬ μ¬νμ μΈμ§νμμμ€.
- λ¬Ένμ κ°μμ±: μ¬μ©μ μΈν°νμ΄μ€ λ° λ¬Έμλ₯Ό λ¬Ένμ κ°μμ±μ μΌλμ λκ³ λμμΈν©λλ€. νΉμ λ¬ΈνκΆμμ λΆμΎνκ±°λ λΆμ μ ν μ μλ μ΄λ―Έμ§, κΈ°νΈ λλ μΈμ΄λ μ¬μ©νμ§ λ§μμμ€.
μλ₯Ό λ€μ΄, μλ¦¬μΌ μ°κ²°μ ν΅ν΄ νμ λ°μ΄ν°λ₯Ό μΉ μ ν리μΌμ΄μ μΌλ‘ μ μ‘νλ μλ£ κΈ°κΈ°λ λ―Έκ΅μμλ HIPAA κ·μ , μ λ½μμλ GDPRμ μ€μν΄μΌ ν©λλ€. μΉ μ ν리μΌμ΄μ μ νμλλ λ°μ΄ν°λ μ¬μ©μ κΈ°λ³Έ μ€μ μΈμ΄λ‘ μ§μνλμ΄μΌ νλ©° νμ§ λ°μ΄ν° κ°μΈ μ 보 λ³΄νΈ κ·μ μ μ€μν΄μΌ ν©λλ€.
μΌλ°μ μΈ λ¬Έμ ν΄κ²°
λ€μμ Web Serial API λ° νλ¦ μ μ΄ μμ μ μνν λ λ°μν μ μλ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ μ μ¬μ μΈ ν΄κ²° λ°©λ²μ λλ€.
- λ°μ΄ν° μμ€: μ μ ν νλ¦ μ μ΄λ₯Ό μ¬μ©νκ³ μΉ μ ν리μΌμ΄μ κ³Ό μ₯μΉ λͺ¨λμμ 보λ μλκ° μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈν©λλ€. λ²νΌ μ€λ²νλ‘λ₯Ό νμΈν©λλ€.
- ν΅μ μ€λ₯: μλ¦¬μΌ ν¬νΈ μ€μ (보λ μλ, λ°μ΄ν° λΉνΈ, ν¨λ¦¬ν°, μ€ν± λΉνΈ)μ΄ μμͺ½μμ μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈν©λλ€. λ°°μ λ¬Έμ λλ μΌμ΄λΈ κ²°ν¨μ νμΈν©λλ€.
- λΈλΌμ°μ νΈνμ±: Web Serial APIλ Chrome λ° Edgeμ κ°μ μ΅μ λΈλΌμ°μ μμ λ리 μ§μλμ§λ§ APIλ₯Ό μ¬μ©ν μ μλ κ²½μ° μ ν리μΌμ΄μ μ΄ μ μμ μΌλ‘ μ²λ¦¬λλμ§ νμΈν©λλ€. λ체 μ루μ λλ μ μ©ν μ€λ₯ λ©μμ§λ₯Ό μ 곡ν©λλ€.
- κΆν λ¬Έμ : μ¬μ©μλ μΉ μ ν리μΌμ΄μ μ΄ μλ¦¬μΌ ν¬νΈμ μ‘μΈμ€ν μ μλλ‘ λͺ μμ μΌλ‘ κΆνμ λΆμ¬ν΄μΌ ν©λλ€. μ¬μ©μμκ² κΆνμ λΆμ¬νλ λ°©λ²μ λν λͺ νν μ§μΉ¨μ μ 곡ν©λλ€.
- λλΌμ΄λ² λ¬Έμ : μ¬μ©μ μμ€ν μ μ리μΌ-USB μ΄λν°μ νμν λλΌμ΄λ²κ° μ€μΉλμ΄ μλμ§ νμΈν©λλ€.
κ²°λ‘
Web Serial APIλ₯Ό μ¬μ©νμ¬ μλ¦¬μΌ ν΅μ λ° νλ¦ μ μ΄λ₯Ό λ§μ€ν°νλ κ²μ νλμ¨μ΄ μ₯μΉμ μνΈ μμ©νλ μμ μ μ΄κ³ κ°λ ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. μλ¦¬μΌ ν΅μ μ κΈ°λ³Έ μ¬ν, λ€μν μ νμ νλ¦ μ μ΄ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄νλ©΄ Web Serial APIμ λͺ¨λ μ μ¬λ ₯μ νμ©νλ κ°λ ₯ν μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. κΈλ‘λ² μμλ₯Ό κ³ λ €νκ³ μ² μ ν ν μ€νΈλ₯Ό ꡬννμ¬ μ ν리μΌμ΄μ μ΄ μ μΈκ³ μ¬μ©μλ₯Ό μν΄ μννκ² μλνλμ§ νμΈνμμμ€. κ°λ₯νλ©΄ νλμ¨μ΄ νλ¦ μ μ΄λ₯Ό μ¬μ©νκ³ νμν κ²½μ° κ°λ ₯ν μ€λ₯ μ²λ¦¬ λ° XON/XOFF μννΈμ¨μ΄ νλ¦ μ μ΄λ₯Ό ꡬννλ©΄ μΉ μλ¦¬μΌ μ ν리μΌμ΄μ μ μμ μ±κ³Ό μ¬μ©μ κ²½νμ΄ ν¬κ² ν₯μλ©λλ€.